# 用beautifulsoup  解析库对豆瓣top250图书进行爬取
# 用requests对数据进行爬取，用beautifulsoup对数据进行解析
from requests.exceptions import RequestException
import requests
from  pyquery import PyQuery as pq
import os,time,json

def getPage(url):
    '''定义页面爬取函数'''
    try:
        # 定义请求头部信息
        headers = {'User-Agent':'User-Agent:Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1'}
        res = requests.get(url,headers=headers)
        if res.status_code == 200:
            return res.text # 文本形式打印网页源码
        else:
            return None
    except RequestException:
        return None

def parsePage(content):
    '''对爬取的页面进行解析'''
    doc = pq(content) # 解析爬取页面

    # 解析网页中所有标签并遍历输出标签名
    items =  doc('tr.item')

    # print(soup.prettify())  #输出网页，已经被格式化
    # print(items)
    try:
        for item in items.items():
            # print(item)
         
            yield{
                    'image' : item.find('a.nbg img').attr('src'),
                    'title' : item.find('div.pl2 a').text(),
                    'author' : item.find('p.pl').text().split('/')[0],
                    'grade' : item.find('span.rating_nums').text(),
                    'content' : item.find('span.inq').text(), 
                        }
    except Exception as err:
        print(err)

def writeFile(content):
    '''执行文件追加写操作'''
    with open("./PyQuery_result.txt",'a',encoding='utf-8') as f:
    	f.write(json.dumps(content,ensure_ascii=False)+"\n")

def main(offset):
    '''负责调度函数'''
    url = "https://book.douban.com/top250?start="+str(offset)  # 构造url地址
    html = getPage(url) # 调用getPage函数对url地址进行爬取
    # 判断是否爬取到数据，并调用解析函数
    if html:
        for item in parsePage(html):
            print(item)
            writeFile(item)


if __name__ == '__main__':
    for i in range(10):
        main(offset=i*25)
        time.sleep(1)

